﻿using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcXmlRouting
{
    /// <summary>
    ///     权限验证示例
    ///     <para>2010/8/13</para>
    ///     <para>TANGJINGBO</para>
    ///     <para>tangjingbo</para>
    /// </summary>
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        /// <summary>
        ///     在过程请求授权时调用。
        /// </summary>
        /// <param name="filterContext">
        ///     筛选器上下文，它封装用于 <see cref="T:System.Web.Mvc.AuthorizeAttribute" /> 的信息。
        /// </param>
        /// <exception cref="T:System.ArgumentNullException">
        ///     <paramref name="filterContext" /> 参数为 null。
        /// </exception>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
        }

        /// <summary>
        ///     确定是否获得访问核心框架的授权。
        /// </summary>
        /// <param name="httpContext">HTTP 上下文，它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
        /// <returns>如果获得访问授权，则为 true；否则为 false。</returns>
        /// <exception cref="T:System.ArgumentNullException">
        ///     <paramref name="httpContext" /> 参数为 null。
        /// </exception>
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            string[] users = Users.Split(',');

            if (!httpContext.User.Identity.IsAuthenticated)
                return false;

            if (users.Length > 0 &&
                !users.Contains(httpContext.User.Identity.Name,
                                StringComparer.OrdinalIgnoreCase))
                return false;

            return true;
        }
    }
}